/* 山洞中有n种宝物各一件，每种宝物有一定重量w和相应的价值v，毛驴运载能力有限，只能运走m重量的宝物，一种宝物只能
拿一件，宝物可以分割，那么怎么才能使毛驴运走宝物的价值最大呢？*/

#include<iostream>
#include<algorithm>

using namespace std;

const int M= 1000005;
struct three{
    double w;
    double v;
    double p;
}s[M];

bool cmp(three a, three b){
    return a.p > b.p;
}
int main(){
    int n; // n件宝物
    double m;
    cout<<"请输入宝物数量n，及毛驴的承载能力m："<<endl;
    cin>>n>>m;
    cout<<"请输入每件宝物的重量和价值，用空格分开："<<endl;
    for(int i = 0; i < n; i++){
        cin>>s[i].w>>s[i].v;
        s[i].p = s[i].v / s[i].w;
    }
    sort(s, s+n, cmp);
    double sum = 0.0;
    for(int i=0; i< n; i++){
        if(m > s[i].w){
            cout<<"可以装下该件宝物："<<s[i].w<<" "<<s[i].v<<" "<<s[i].p<<endl;
            m -= s[i].w;
            sum += s[i].v;
        } else{
            cout<<"不能完全装下该件宝物，装入部分："<<s[i].w<<" "<<s[i].v<<" "<<m*s[i].p<<endl;
            sum += m*s[i].p;
            break;
        }
    }
    cout<<"装入宝物的最大价值Maximum value="<<sum<<endl;
    
    return 0;
}